home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 3_0 / OIC_1 / OIC_SOUR / STDIOSTR.C < prev    next >
Text File  |  1989-03-05  |  2KB  |  97 lines

  1. /*    
  2.  *        StdioStream abstract class
  3.  *
  4.  *        a kind of Stream that connects to the C library
  5.  *        standard I/O
  6.  *
  7.  *            Copyright ⌐ John Wainwright 1989
  8.  *
  9.  *    SuperClasses :
  10.  *                    Stream
  11.  *  Instance Vars :
  12.  *
  13.  *    Class Vars :
  14.  *    
  15.  *    Methods :
  16.  *
  17.  *    Class Methods :
  18.  *
  19.  */
  20.  
  21. #include <stdio.h>
  22. #include "oic.h"
  23. #include "generics.h"
  24.  
  25. class         StdioStream;                /* the StdioStream class             */
  26.  
  27. object        screen;                        /* default standard i/o    ...            */
  28. object        error;
  29.  
  30. struct StdioStream_i                    /* StdioStream instance structure    */
  31. {
  32.     int        fd;                            /* file descriptor                    */
  33.     char    *name;
  34. };
  35. typedef struct StdioStream_i StdioStream_i;
  36.  
  37. /* -------------------- StdioStream Instance methods ------------------- */
  38.  
  39. static object
  40. _new(self, s, ap)                        /* create a stdio stream        */
  41.     object                self;
  42.     register StdioStream_i    *s;
  43.     register struct 
  44.     {
  45.         char    *name;
  46.         char    *mode;
  47.     } *ap;
  48. {
  49.     s->name = ap->name;    /* dummy just now */
  50. }
  51.  
  52. method object
  53. _put(self, s, str)                        /* output string                 */
  54.     object                    self;
  55.     register StdioStream_i    *s;
  56.     register char             **str;
  57. {
  58.     register char    *p;
  59.     
  60.     for (p = *str; *p; )
  61.         putchar(*p++);
  62. }
  63.  
  64. method char *
  65. _gprintf(self, s, ap)                    /* formatted print (printf)        */
  66.     object                    self;
  67.     register StdioStream_i    *s;
  68.     register struct
  69.     {
  70.         char    *fmt;
  71.         double    a1, a2, a3, a4, a5, a6,
  72.                 a7, a8, a9;
  73.     } *ap;
  74. {
  75.     char    buf[512];
  76.     
  77.     sprintf(buf, ap->fmt, ap->a1, ap->a2, ap->a3, ap->a4, ap->a5,
  78.                           ap->a6, ap->a7, ap->a8, ap->a9);
  79.     put(self, buf);
  80. }
  81.  
  82. /* ------------------- Init the StdioStream class ---------------------- */
  83.  
  84. InitStdioStream()
  85. {
  86.     StdioStream = NewClass(sizeof(StdioStream_i), 0, "StdioStream", END);
  87.     AddMethods(StdioStream,
  88.         newGeneric,         _new,
  89.         putGeneric,         _put,
  90.         gprintfGeneric,     _gprintf,
  91.         END);
  92.         
  93.     screen = New(StdioStream, "screen");
  94.     error = New(StdioStream, "error");
  95. }
  96.  
  97.